package ru.susu.algebra.partition.transformers;

import java.util.Arrays;

import ru.susu.algebra.partition.Partition;
import ru.susu.algebra.partition.PartitionsFactory;
import ru.susu.algebra.transformers.IObjectTransformer;

/**
 * @author akargapolov
 * @since: 28.03.2009
 */
public class CentralUnitPartitionTransformer implements IObjectTransformer<Partition>
{

	/**
	 * Переписывание различных нечетных чисел разбиения в элементы главных
	 * углов.<br>
	 * Подвешивание за центр в i,i.
	 */
	@Override
	public Partition transformObject(Partition partition)
	{
		Integer[] array = partition.getArrayRepresentation();
		Integer[] newArray = new Integer[array[array.length - 1] / 2 + 1];
		Arrays.fill(newArray, Integer.valueOf(0));
		int sIndex = 0;
		for (int i = array.length - 1; i >= 0; i--)
		{
			newArray[sIndex] += array[i] / 2;
			for (int j = 0; j <= array[i] / 2; j++)
				newArray[sIndex + j]++;
			sIndex++;
		}
		return PartitionsFactory.createPartition(newArray);
	}

}
